﻿$(function () {
    // Запрещаем браузеру кэширование формы
    $.ajaxSetup({ cache: false });
    BindDialogButtons();
});

function BindDialogButtons() {
    // Подключаем событие для конпок, отображающих диалоги
    $('.dialogLink').off('click').on('click', function () {
        var element = $(this);

        // Получаем данные из HTML5 атрибутов
        var dialogId = element.attr('data-dialog-id');
        var dialogUrl = element.attr('data-dialog-url');
        var dialogWidth = element.attr('data-dialog-width');
        var updateTargetId = element.attr('data-update-target-id');
        var updateUrl = element.attr('data-update-url');
        var onOpen = element.attr('data-after-open');
        var onSuccess = element.attr('data-after-success');
        var defaultSubmit = element.attr('data-default-submit');

        // Создаем контейнер диалога
        var dialogDiv = "<div id='" + dialogId + "' class='modal fade' tabindex='-1' role='dialog'></div>";

        // Загружаем урл
        $(dialogDiv).load(dialogUrl, function () {

            // Добавляем в странице
            $('body').append($(this));
            // Показываем модально диалог
            $(this).modal();

            $(this).on('hidden.bs.modal', function (e) {
                $('#' + dialogId).remove();
            })

            $(this).on('shown.bs.modal', function (e) {
                var fn = window[onOpen];
                if (typeof fn === "function") fn();
            })
                        
            $.validator.unobtrusive.parse(this);

            if (defaultSubmit != "1")
                // Подключаем аякс отправку формы
                wireUpForm(this, updateTargetId, updateUrl, onOpen, onSuccess);
        });
        return false;
    });
}

function wireUpForm(dialog, updateTargetId, updateUrl, onOpen, onSuccess) {
    $('form', dialog).submit(function () {

        // Клиентская валидаци
        if (!$(this).valid())
            return false;

        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (result) {
                // Проверяем, что успешно
                if (result.success) {
                    // Закрываем диалог
                    $(dialog).modal('hide');

                    // Перегружаем необходимые контейнеры
                    var arr_updateTargetId = updateTargetId.split(";");
                    var arr_updateUrl = updateUrl.split(";");

                    for (var i = 0; i < arr_updateTargetId.length; i++) {
                        $('#' + arr_updateTargetId[i]).load(arr_updateUrl[i]);
                    }

                    var fn = window[onSuccess];
                    if (typeof fn === "function") fn(result);
                    
                } else {
                    // Еще раз грузим форму, чтобы Отображать ошибки
                    $(dialog).html(result);

                    var fn = window[onOpen];
                    if (typeof fn === "function") fn();

                    $.validator.unobtrusive.parse(dialog);
                    wireUpForm(dialog, updateTargetId, updateUrl, onOpen, onSuccess);
                }
            }
        });
        return false;
    });
}

